using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkAnalystTools._Analysis
{
    /// <summary>
    /// <para>Copy Traversed Source Features</para>
    /// <para>Creates two feature classes and a table, which together contain information about the edges, junctions, and turns that are traversed while solving a network analysis layer.</para>
    /// <para>创建两个要素类和一个表，它们共同包含有关求解网络分析图层时遍历的边、交汇点和转弯的信息。</para>
    /// </summary>    
    [DisplayName("Copy Traversed Source Features")]
    public class CopyTraversedSourceFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CopyTraversedSourceFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_input_network_analysis_layer">
        /// <para>Input Network Analysis Layer</para>
        /// <para>The network analysis layer from which traversed source features will be copied. If the network analysis layer does not have a valid result, the layer will be solved to produce one.</para>
        /// <para>将从中复制遍历源要素的网络分析图层。如果网络分析图层没有有效结果，则将求解该图层以生成一个结果。</para>
        /// </param>
        /// <param name="_output_location">
        /// <para>Output Location</para>
        /// <para>The workspace where the output table and two feature classes will be saved.</para>
        /// <para>将保存输出表和两个要素类的工作空间。</para>
        /// </param>
        /// <param name="_edge_feature_class_name">
        /// <para>Edge Feature Class Name</para>
        /// <para>The name of the feature class that will contain information about the traversed edge source features. If the solved network analysis layer doesn't traverse any edge features, an empty feature class is created.</para>
        /// <para>将包含有关遍历的边源要素的信息的要素类的名称。如果求解的网络分析图层未遍历任何边要素，则将创建一个空要素类。</para>
        /// </param>
        /// <param name="_junction_feature_class_name">
        /// <para>Junction Feature Class Name</para>
        /// <para>The name of the feature class that will contain information about the traversed junction source features, including system junctions and relevant points from the input network analysis layer. If the solved network analysis layer doesn't traverse any junctions, an empty feature class is created.</para>
        /// <para>要素类的名称，该要素类将包含有关穿越的交汇点源要素的信息，包括系统交汇点和输入网络分析图层中的相关点。如果求解的网络分析图层未遍历任何交汇点，则将创建一个空要素类。</para>
        /// </param>
        /// <param name="_turn_table_name">
        /// <para>Turn Table Name</para>
        /// <para>The name of the table that will contain information about the traversed global turns and turn features that scale cost for the underlying edges. If the solved network analysis layer doesn't traverse any turns, an empty table is created. Since restricted turns are never traversed, they are never included in the output.</para>
        /// <para>将包含有关遍历的全局转弯和可缩放基础边成本的转弯要素的信息的表的名称。如果求解的网络分析图层未遍历任何转弯，则创建一个空表。由于从不遍历受限制的转弯，因此它们永远不会包含在输出中。</para>
        /// </param>
        public CopyTraversedSourceFeatures(object _input_network_analysis_layer, object _output_location, object _edge_feature_class_name, object _junction_feature_class_name, object _turn_table_name)
        {
            this._input_network_analysis_layer = _input_network_analysis_layer;
            this._output_location = _output_location;
            this._edge_feature_class_name = _edge_feature_class_name;
            this._junction_feature_class_name = _junction_feature_class_name;
            this._turn_table_name = _turn_table_name;
        }
        public override string ToolboxName => "Network Analyst Tools";

        public override string ToolName => "Copy Traversed Source Features";

        public override string CallName => "na.CopyTraversedSourceFeatures";

        public override List<string> AcceptEnvironments => ["outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_input_network_analysis_layer, _output_location, _edge_feature_class_name, _junction_feature_class_name, _turn_table_name, _edge_features, _junction_features, _turn_table, _modified_input_network_analysis_layer];

        /// <summary>
        /// <para>Input Network Analysis Layer</para>
        /// <para>The network analysis layer from which traversed source features will be copied. If the network analysis layer does not have a valid result, the layer will be solved to produce one.</para>
        /// <para>将从中复制遍历源要素的网络分析图层。如果网络分析图层没有有效结果，则将求解该图层以生成一个结果。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Network Analysis Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_network_analysis_layer { get; set; }


        /// <summary>
        /// <para>Output Location</para>
        /// <para>The workspace where the output table and two feature classes will be saved.</para>
        /// <para>将保存输出表和两个要素类的工作空间。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Location")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_location { get; set; }


        /// <summary>
        /// <para>Edge Feature Class Name</para>
        /// <para>The name of the feature class that will contain information about the traversed edge source features. If the solved network analysis layer doesn't traverse any edge features, an empty feature class is created.</para>
        /// <para>将包含有关遍历的边源要素的信息的要素类的名称。如果求解的网络分析图层未遍历任何边要素，则将创建一个空要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Edge Feature Class Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _edge_feature_class_name { get; set; }


        /// <summary>
        /// <para>Junction Feature Class Name</para>
        /// <para>The name of the feature class that will contain information about the traversed junction source features, including system junctions and relevant points from the input network analysis layer. If the solved network analysis layer doesn't traverse any junctions, an empty feature class is created.</para>
        /// <para>要素类的名称，该要素类将包含有关穿越的交汇点源要素的信息，包括系统交汇点和输入网络分析图层中的相关点。如果求解的网络分析图层未遍历任何交汇点，则将创建一个空要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Junction Feature Class Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _junction_feature_class_name { get; set; }


        /// <summary>
        /// <para>Turn Table Name</para>
        /// <para>The name of the table that will contain information about the traversed global turns and turn features that scale cost for the underlying edges. If the solved network analysis layer doesn't traverse any turns, an empty table is created. Since restricted turns are never traversed, they are never included in the output.</para>
        /// <para>将包含有关遍历的全局转弯和可缩放基础边成本的转弯要素的信息的表的名称。如果求解的网络分析图层未遍历任何转弯，则创建一个空表。由于从不遍历受限制的转弯，因此它们永远不会包含在输出中。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Turn Table Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _turn_table_name { get; set; }


        /// <summary>
        /// <para>Edge Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Edge Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _edge_features { get; set; }


        /// <summary>
        /// <para>Junction Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Junction Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _junction_features { get; set; }


        /// <summary>
        /// <para>Turn Table</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Turn Table")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _turn_table { get; set; }


        /// <summary>
        /// <para>Modified Input Network Analysis Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Modified Input Network Analysis Layer")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _modified_input_network_analysis_layer { get; set; }


        public CopyTraversedSourceFeatures SetEnv(object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}